Ninereeds NRS04

By Steve Horne, 10 July 1999

This generator is a synthesizer, with the following features...

A feature that some people may find novel is that this machine actually uses note-off commands. I may add some more precise timing controls to a future machine, but I find using note-offs much more convenient than providing calculated durations for every note.

However, if the sustain level is set to zero, and the release rate is set the same as the decay rate, there is no need to worry about note-off commands.


History

September 3, 1999
I've left this so long, I'm ashamed of myself. However, this version has...
July 18, 1999
Added some major facilities, including... This is by no means complete...
July 13, 1999
Fixed some very silly defaults, added an amplitude control for the twin note, and added an extra waveform (based on double triangle, but adjusted to give it some even harmonics).

Nothing major, no compatability issues, but fewer irritations.

July 10, 1999
First Release

Global Parameters

This machine does not have any global parameters.


Track Parameters

The track parameters are...

Note
Triggers new notes. A note off here stops the note, by triggering the release phase.
Bend Note
Starts a pitch bend, specifying the target note. A note off here stops a pitch bend, so that the note continues at whatever pitch it reached.
Volume
How loud to play the note.


Attributes

This machine does not have any attributes.


Edit Dialog

To access the edit dialog, go to the Machine Editor screen in Buzz, right click on the appropriate machine and select 'Edit Ninereeds NRS04' on the context menu.

A property sheet will be displayed, which has three pages...

Waveform

Of the commonly known simple waveforms, the only one that has even harmonics is the ramp (sometimes called sawtooth). While waveforms without even harmonics are useful, they often sound beepy or obviously synthesized, no matter how much they are processed - both string and brass acoustic instruments definitely produce even harmonics, and I'm sure this is pretty normal for real instruments.

If you find the ramp waveform too harsh, try 'Altered Bumps 2', 'Double Bumps 2' or 'Double Triangle 2' instead - and don't forget to play with the fractal settings.

Finally, if the Twin note is enabled using the checkbox it is always calculated, even if its amplitude is zero. The only effect in this case is to halve the amplitude of the main note. Using a twin note almost doubles the CPU usage, so turn it off if you can't hear the difference.

Envelope

AuxBus Effects

Waveform centre modulation basically distorts a waveform such that the normal centre point is reached slightly earlier or slightly later than normal. In the case where the original waveform is a square this gives pulse width modulation. The advantage is simply that it can be applied to any waveform.

Broadcast Rx

About
My web and email address, and other pointless stuff.

The parameters on the dialog are not meant to be edited during a live performance. There should be no possibility of a crash, so you can adjust the parameters while a tune is playing to get the sound you want, but there is no attempt to avoid clicks or other strange effects.


Broadcast Commands Accepted

The following fixed broadcast commands are understood by this machine...

Select Program
Command      : 01
Byte Param 1 : Program ID
Set Waveform
Command      : 80
Byte Param 1 : Waveform ID
Set Fractal
Command      : 81
Byte Param 1 : Fractal Depth
Word Param 1 : Fractal Effect Low
Word Param 2 : Fractal Effect High
Set Envelope
Command      : 82
Word Param 1 : Attack
Word Param 2 : Decay
Word Param 3 : Sustain
Word Param 4 : Release
Set Pitch Bend Rate
Command      : 83
Word Param 1 : Pitch Bend Rate
Set Twin Note
Command      : 84
Byte Param 1 : Enable Twin Note
Byte Param 2 : Apply Fractal Before Mixing
Word Param 1 : Detune - not yet implemented
Word Param 2 : Twin Note Amplitude
Set Ring Modulation
Command      : 85
Byte Param 1 : Enable on Main Note
Byte Param 2 : Enable on Twin Note
Set Frequency Modulation
Command      : 86
Byte Param 1 : Enable Frequency Modulation
Word Param 1 : Modulation Level
Set Amplitude Modulation
Command      : 87
Byte Param 1 : Enable Amplitude Modulation
Word Param 1 : Modulation Level
Set Pulse Width (Waveform Centre) Modulation
Command      : 88
Byte Param 1 : Enable Pulse Width Modulation
Word Param 1 : Modulation Level

How does that fractal thing work?

Most controls for this machine are fairly self-explanatory, or at least fairly standard. The fractal distortion, however, is my own invention and some explanation is in order.

The fractal distortion uses an iterative function. That is, once you get the result of the function, you feed it back in again. It is heavily based on an equation for modelling population fluctuations that was first documented in ôSimple Mathematical Models with Very Complicated Dynamicsö (Nature, No. 26, 1976), by R. M. May.

A sound signal has very little to do with population fluctuations, so I designed a cubic function to use instead. As with the May equation, there is a parameter that controls how 'chaotic' it is. I have called this the fractal effect. In addition, the fractal depth is the number of times the function is applied (the equivalent of the number of generations ahead to predict in the May equation).

When the fractal depth is set to zero, or the fractal effect is set to one, the function has no effect on the input signal. If the fractal depth is zero, the fractal is never called.

When the fractal effect is set to a high sufficiently high value, the function becomes chaotic. With a sufficiently high fractal depth, it is quite simple to produce white noise. With more moderate values for the effect and depth parameters, the fractal distortion will add moderate levels of high harmonics.

The reason there are two 'fractal effect' controls is simply that the fractal effect is varied as the note is played. The effect value actually used will be between the 'high' effect and the 'low' effect, depending on the current envelope level.

Finally, there is a checkbox in the 'Twin Note' group which allows the fractal to be applied either before or after the twin note is mixed in with the original note. If the fractal is applied before the mixing, then it needs to be calculated separately for both the original and the twin note. Unfortunately, this is normally necessary - applying the fractal after mixing gives a rather odd effect. I left it in as an option in case someone really needs an odd effect.


What's all this broadcast command listening stuff

I have created a small DLL which provides an additional means of communication between machines. It uses similar principles to AuxBus, but instead of communication signals it allow commands to be sent between machines.

The command format is based on the kinds of things that can be done in the pattern editor, and the main way of sending these commands will be using a machine that stores these commands in its pattern editor - Ninereeds Broadcast.

The inspiration was a recent message to the buzz developers mailing list, which suggested the possibility of a tune reacting to externally generated events - specifically, to locations and situations in a game.

The end result supports a number of requirements...


If you have any comments or suggestions, please e-mail them to steve@lurking.demon.co.uk.